/*
 * @lc app=leetcode.cn id=151 lang=cpp
 *
 * [151] 翻转字符串里的单词
 */

// @lc code=start
class Solution
{
public:
    string reverseWords(string s)
    {
        //反转单词 而且需要删除多余的空格
        //首先删除字符串前的空格 双指针
        int slow = 0;
        int fast = 0;
        while (s[fast] == ' ' && fast < s.size())
        {
            fast++;
        }
        while (fast < s.size())
        {
            //去除字符串中多余的空格
            //此时fast一定不为空格
            if (s[fast] != ' ')
            {
                s[slow++] = s[fast++];
            }
            else
            {
                //此时s[fast]=' '
                s[slow++] = s[fast++];
                while (s[fast] == s[fast - 1])
                {
                    fast++;
                }
            }
        }
        //如果末尾不为空格  此时slow指向末尾的字符的下一个
        while (slow - 1 < s.size() && s[slow - 1] == ' ')
        {
            s.resize(slow - 1);
        }
        s.resize(slow);
        //反转单词
        slow = 0;
        fast = 0;
        while (fast < s.size())
        {
            while (s[fast] != ' ' && fast < s.size())
            {
                fast++;
            }
            //此时fast指向单词的下一个位置
            reverse(s.begin() + slow, s.begin() + fast);
            slow = fast;
        }
        reverse(s.begin(), s.end());
        return s;
    }
};
// @lc code=end
